package com.csun.cmny.provider.service;

import com.csun.cmny.base.dto.LoginAuthDto;
import com.csun.cmny.core.support.IService;
import com.csun.cmny.provider.device.yingshi.entity.YingShiDeviceCameraVo;
import com.csun.cmny.provider.model.domain.DmcYingShiCamera;
import com.csun.cmny.provider.model.dto.propertyManagement.SelectDeviceDataDto;
import com.csun.cmny.provider.model.dto.yingshi.YingShiCameraDto;
import com.csun.cmny.provider.model.dto.yingshi.YingShiCameraQueryDto;
import com.csun.cmny.provider.model.vo.GroupVo;
import com.csun.cmny.provider.model.vo.propertyManagement.PropertyDataVo;
import com.csun.cmny.provider.model.vo.yingshi.GroupCameraTreeVo;
import com.csun.cmny.provider.model.vo.yingshi.YingShiCameraVo;
import com.csun.cmny.provider.model.vo.yingshi.YsCameraChannelVo;

import java.util.List;
import java.util.Map;

/**
 * @Auther: chisj chisj@foxmal.com
 * @Date: 2021/8/27 16:41
 * @Description: 萤石摄像头接口
 */
public interface DmcYingShiCameraService extends IService<DmcYingShiCamera> {

    /**
     * 查询萤石摄像头列表 - 分页
     *
     * @param yingShiCameraQueryDto the ying shi camera query dto
     *
     * @return  the ying shi camera vo list.
     */
    List<YingShiCameraVo> queryListWithPage(YingShiCameraQueryDto yingShiCameraQueryDto);

    /**
     * 添加萤石摄像头信息
     *
     * @param yingShiCameraDto  the ying shi camera dto
     * @param loginAuthDto  the login auth dto
     *
     * @return  the int.
     */
    Integer save(YingShiCameraDto yingShiCameraDto, LoginAuthDto loginAuthDto);

    /**
     * 修改萤石摄像头信息
     *
     * @param yingShiCameraDto  the ying shi camera dto
     * @param loginAuthDto  the login auth dto
     *
     * @return  the int.
     */
    Integer edit(YingShiCameraDto yingShiCameraDto, LoginAuthDto loginAuthDto);

    /**
     * 根据id删除萤石摄像头信息
     *
     * @param id    the ying shi camera id
     *
     * @return  the int.
     */
    Integer deleteById(Long id);

    /**
     * 查询萤石摄像头的数据
     *
     * @param selectDeviceDataDto   the select device data dto
     *
     * @return  the property data vo
     */
    List<PropertyDataVo> selectDeviceData(SelectDeviceDataDto selectDeviceDataDto);

    /**
     * 获取机构摄像头列表
     *
     * @param groupVoList   the group vo list
     *
     * @return  the group camera tree vo list.
     */
    List<GroupCameraTreeVo> queryGroupCameraList(List<GroupVo> groupVoList, Long groupId);

    /**
     * 查询摄像头通道列表
     *
     * @param yingShiCameraQueryDto the ying shi camera query dto
     *
     * @return  the ying shi camera channel vo list.
     */
    List<YsCameraChannelVo> getChannelList(YingShiCameraQueryDto yingShiCameraQueryDto);

    /**
     * 获取萤石摄像头通道状态
     *
     * @param ysCameraChannelVoList the ying shi camera channel vo list
     *
     * @return  the ying shi device camera vo map.
     */
    Map<Long, Map<Integer, YingShiDeviceCameraVo>> getChannelStatus(List<YsCameraChannelVo> ysCameraChannelVoList);
}
